// Copyright (C) 1953-2020 NUDT
// Verilog module name - reset_top 
// Version: RST_TOP_V1.0
// Created:
//         by - fenglin 
//         at - 10.2020
////////////////////////////////////////////////////////////////////////////
// Description:
//        top of reset
//               
///////////////////////////////////////////////////////////////////////////

`timescale 1ns/1ps

module reset_top
#(
    parameter NUM_GMAC =2,
    parameter NUM_XGMAC = 2
)
(
    i_clk,
    i_rst_n,
    
    ib_mac_rxclk,
    
    o_core_rst_n,
    ob_mac_rst_n
);

input                   i_clk;                  
input                   i_rst_n;

input     [(NUM_XGMAC + NUM_GMAC)-1:0]              ib_mac_rxclk;

output                  o_core_rst_n;
output    [(NUM_GMAC + NUM_XGMAC -1):0]              ob_mac_rst_n;

wire                    w_rst_n_glitch;

reset_glitch reset_glitch_inst(
.i_clk(i_clk),
.i_rst_n(i_rst_n),

.o_rst_n_glitch(w_rst_n_glitch)  
);

reset_sync core_reset_sync(
.i_clk(i_clk),
.i_rst_n(w_rst_n_glitch),

.o_rst_n_sync(o_core_rst_n)   
);

genvar i;
generate 
for(i=0; i<=(NUM_XGMAC + NUM_GMAC-1); i=i+1) begin: MAC_RESET_SYNC
reset_sync mac_reset_sync(
.i_clk(ib_mac_rxclk[i]),
.i_rst_n(w_rst_n_glitch),

.o_rst_n_sync(ob_mac_rst_n[i])   
);
end
endgenerate

endmodule
